package com.kaifamiao.inherit;

/**
 * this是什么:
 *   可以理解为是一个指向当前实例(对象)的一个引用(或指针)
 *   (可以将this理解为一个变量，其中存储了当前实例(即当前对象)在堆内存中的首地址)
 * this的三种用法:
 *   (1)、访问实例变量 ( 取值 和 赋值 )
 *   (2)、调用实例方法
 *   (3)、在构造方法中调用本类的其它构造方法
 * this可以在哪里使用:
 *   (1)、实例初始化器(俗称普通代码块)
 *   (2)、构造方法
 *   (3)、实例方法
 *
 * this不能使用在 类方法(俗称静态方法)中、也不能使用在 类初始化器(俗称静态代码块) 中
 */
public class Father {

    protected String name;

    public Father(){
        // 通过 "this([参数列表])" 形式调用本类其它构造方法
        this( "佚名" );
    }

    public Father(String name) {
        // 通过 "this.实例方法名([参数列表])" 形式调用实例方法
        this.setName( name );
    }

    public String getName() {
        // 通过 “this.实例变量名” 来获取实例变量的值
        String x = this.name ;
        // 返回获取到的实例变量的值
        return x;
    }

    public void setName(String name) {
        // 通过 “this.实例变量名” 来为实例变量赋值
        this.name = name;
    }

    public boolean compare( Father another ) {
        // 用 == 比较两个值是否相等，比如比较两个变量中存储的值是否相等
        return this == another;
    }

    public static void main(String[] args) {
        Father f = new Father( "刘启" );
        System.out.println( f );
        // 将引用变量 f 中存储的值赋值给 引用变量 a
        Father a = f ;
        // 在 compare 内部的 this 指向 f 所引用的对象(实例)
        boolean r = f.compare( a );
        System.out.println( r );

        Father t = new Father( "刘恒" );
        System.out.println( t.compare( t ) );
    }
}
